﻿using System;
using System.Collections.Generic;
using ClickLand.CorporacionPlaza.AccesoDato.Contratos;
using ClickLand.CorporacionPlaza.AccesoDato.Implementacion.NHibernateMySql;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.Comunes.EntidadesDto;
using ClickLand.CorporacionPlaza.Servicio.Implementacion;
using NUnit.Framework;

namespace Pruebas
{
    [TestFixture]
    public class DaoClientePrueba
    {
        [TestCase]
        public void AgregarClientePrueba()
        {
            Cliente cliente = new Cliente();
            cliente.Correo = "prueba";
            cliente.DocumentoIdentificacion = "J123456789";
            cliente.Nombre = "prueba";
            cliente.NumeroCelular = "02125503167";
            cliente.NumeroOficina = "02125503167";
            cliente.Responsable1 = "LeonPrueba";
            cliente.Responsable2 = "LeonPrueba";
            cliente.Responsable3 = "LeonPrueba";
            cliente.Tipo = "prueba";
            cliente.Estado = 1;

            DaoClienteNHibernateMySql dao  = new DaoClienteNHibernateMySql();
 
            Assert.IsTrue(dao.InsertarOModificar(cliente));
        }

        [TestCase]
        public void AgregarEstablecimientoPrueba()
        {
            Establecimiento establecimiento = new Establecimiento();
            establecimiento.Estado = 1;
            establecimiento.Lugar = "prueba";
            establecimiento.Precio = 22;
            establecimiento.Tipo = new TipoEstablecimiento();
            establecimiento.Tipo.Id = 1;
            establecimiento.Numero = "L2312";

            DaoEstablecimientoNHibernateMySql dao = new DaoEstablecimientoNHibernateMySql();

            Assert.IsTrue(dao.InsertarOModificar(establecimiento));
        }

        [TestCase]
        public void ConsultarClientePrueba()
        {
            Cliente parametros = new Cliente();
            parametros.Nombre = "pr";
            parametros.Tipo = null;
            parametros.Estado = null;
            DaoClienteNHibernateMySql dao = new DaoClienteNHibernateMySql();
            List<Cliente> lista = dao.Consultar(parametros);
            Assert.IsNotNull(lista);
            Assert.IsNotEmpty(lista);
       }

        [TestCase]
        public void ConsultarEstablecimientosPrueba()
        {
            var dao = new DaoEstablecimientoNHibernateMySql();
            var servicio = new CorporacionPlazaWS();
            var lista = servicio.ConsultarTodosEstablecimientos(new EstablecimientoDto
                                                                    {
                                                                        Tipo = new TipoEstablecimientoDto {Id = 2}
                                                                    });
            Assert.IsNotNull(lista);
            Assert.IsNotEmpty(lista);
        }


        [TestCase]
        public void AgregarContrato()
        {
            
            var contrato = new Contrato();
            contrato.FechaInicio = DateTime.Now;
            contrato.FechaFin = DateTime.Now;
            contrato.Cliente = new Cliente();
            contrato.Cliente.Id = 1;
            contrato.PorcentajeVenta = (float) 12.2;
            contrato.Establecimiento = new Establecimiento();
            contrato.Establecimiento.Id = 1;
            contrato.TipoFirma = "Simple";
            contrato.NombreFirmante = "Leonardo Guzman";
            contrato.NombreComercial = "Mc Donalds";
            contrato.MontoGarantia = 0;

            contrato.Garantia = new Garantia();
            contrato.Garantia.Id = 1;
            contrato.Garantia.Descripcion = "Fiador";

            var fiador = new Fiador();
            fiador.Nombre = "Prueba Fiador";
            fiador.Correo = "a@a.com";
            fiador.Telefono = "5123123";
            fiador.Cedula = "V123456789";
            contrato.Fiadores = new List<Fiador>();
            contrato.Fiadores.Add(fiador);

            var poliza = new Poliza();
            poliza.Aseguradora = "Prueba Fiador";
            poliza.Beneficiario = "Prueba Fiador";
            poliza.FechaEmision = DateTime.Now;
            poliza.FechaFin = DateTime.Now;
            poliza.Monto = Convert.ToSingle(12);
            contrato.Polizas = new List<Poliza>();
            contrato.Polizas.Add(poliza);

            contrato.Pension = new Pension();
            contrato.Pension.Estado = 1;
            contrato.Pension.Periodo = 1;
            contrato.Pension.Tipo = "1";

            contrato.Pension.Contrato = contrato;

            var obj = new ContratoPension();
            obj.FechaInicio = DateTime.Now;
            obj.FechaFin = DateTime.Now;
            obj.Monto = 12;
            obj.Porcentaje = 12;
            obj.Pension = contrato.Pension;
            contrato.Pension.ContratoPensiones = new List<ContratoPension>();
            contrato.Pension.ContratoPensiones.Add(obj);

            DaoContratoNHibernateMySql dao = new DaoContratoNHibernateMySql();

            bool respuesta = dao.InsertarOModificar(contrato);

            Assert.IsTrue(respuesta);
        }


        [TestCase]
        public void ConsultarContratoPrueba()
        {
            var servicio = new CorporacionPlazaWS();
            ContratoDto contrato = new ContratoDto();
            contrato.Estado = -1;
            var lista = servicio.ConsultarContrato(contrato);
            Assert.IsNotNull(lista);
        }

        [TestCase]
        public void PruebaConsultaEstablecimientoLibres()
        {
            IDaoEstablecimiento dao = new DaoEstablecimientoNHibernateMySql();
            DateTime dia = new DateTime(2012, 09, 11);
            DateTime dia2 = new DateTime(2013, 09, 11);
            var retorno = dao.ConsultarEstablecimientosLibres(dia, dia2);
            Assert.IsNotEmpty(retorno);
        }

        [TestCase]
        public void PruebaAgregarVenta()
        {
            IDaoVenta dao = new DaoVentaNHibernateMySql();

            Venta venta = new Venta();
            venta.Contrato = new Contrato {Id = 7};
            venta.Estado = 1;
            venta.Fecha = DateTime.Now;
            venta.Monto = 12;
            var retorno = dao.InsertarOModificar(venta);
            Assert.IsFalse(retorno);
        }


        [TestCase]
        public void PruebaConsultarrVenta()
        {
            IDaoVenta dao = new DaoVentaNHibernateMySql();
            Contrato contrato = new Contrato();
            contrato.Id = 7;

            Assert.IsNull(dao.ConsultarXContrato(contrato, DateTime.Now.AddYears(-100), DateTime.Now.AddYears(100)));
        }


        [TestCase]
        public void PruebaConsultarPoliza()
        {
            CorporacionPlazaWS dao = new CorporacionPlazaWS();
            ContratoDto contrato = new ContratoDto();
            contrato.Id = 0;
            contrato.Estado = -1;

            Assert.IsNotNull(dao.ConsultarListaPoliza(contrato));
        }

        [TestCase]
        public void PruebaAgregarProyeccion()
        {
            ProyeccionDto proyeccion = new ProyeccionDto();

            proyeccion.FechaInicio = DateTime.Now;
            proyeccion.FechaFin = DateTime.Now.AddYears(1);
            proyeccion.Estado = 1;
            proyeccion.Porcentaje = 10;
            proyeccion.Monto = 120;
            proyeccion.Contrato = new ContratoDto{Id =  23};

            List<ProyeccionDto> lista = new List<ProyeccionDto>();
            lista.Add(proyeccion);


            List<ProyeccionDto> listaVieja = new List<ProyeccionDto>();

             proyeccion = new ProyeccionDto();
            proyeccion.Id = 2;
            proyeccion.FechaInicio = DateTime.Now;
            proyeccion.FechaFin = DateTime.Now.AddYears(1);
            proyeccion.Estado = 1;
            proyeccion.Porcentaje = 10;
            proyeccion.Monto = 120;
            proyeccion.Contrato = new ContratoDto { Id = 23 };
            listaVieja.Add(proyeccion);
            CorporacionPlazaWS servicio = new CorporacionPlazaWS();

            Assert.IsTrue(servicio.AgregarEditarProyeccion(lista,listaVieja));
        }

        [TestCase]
        public void PruebaConsultarProyeccion()
        {
            var contrato = new ContratoDto { Id = 23 };
            CorporacionPlazaWS servicio = new CorporacionPlazaWS();
            Assert.IsNotNull(servicio.ConsultarProyeccion(contrato));
        }
    }

}
